package ch15;

/**
 * Created by zhangyunqi on 2017/10/18.
 */
/**

 * Encode and decode a message using a key of values stored in

 * a queue.

 */
public class Codes1 {
    public static void main(String[] args)

    {

        int[] key = {5, 12, -3, 8, -9, 4, 10};

        Integer keyValue;

        String encoded = "", decoded = "";

        String message = "All programmers are playwrights and all " +

                "computers are lousy actors.";


        CircularArrayQueue <Integer> keyQueue1 = new CircularArrayQueue <Integer> ();

        CircularArrayQueue <Integer> keyQueue2 = new CircularArrayQueue <Integer> ();



        for (int scan = 0; scan < key.length; scan++)

        {

            keyQueue1.enqueue ( new Integer ( key[scan] ) );

            keyQueue2.enqueue ( new Integer ( key[scan] ) );

        }



        for (int scan = 0; scan < message.length (); scan++)

        {

            keyValue = keyQueue1.dequeue ();

            encoded += (char) ((int) message.charAt ( scan ) + keyValue.intValue ());

            keyQueue1.enqueue ( keyValue );

        }


        System.out.println ( "Encoded Message:\n" + encoded + "\n" );



        for (int scan = 0; scan < encoded.length (); scan++)

        {

            keyValue = keyQueue2.dequeue ();

            decoded += (char) ((int) encoded.charAt ( scan ) - keyValue.intValue ());

            keyQueue2.enqueue ( keyValue );

        }


        System.out.println ( "Decoded Message:\n" + decoded );

    }
}